#include <mips/regdef.h>
#include <sys/syscall.h>

//////////////// STACK ///////////////////////////////////////////////////
//-------------SRA--------------pos		reg			//
//								4		fp			//
//								0		gp			//
//-------------SRA----------------					//
//////////////////////////////////////////////////////////////////////////

# Ascii de los separadores de palabra
#define SPACE_CHAR 32
#define HORIZONTAL_TAB_CHAR 9
#define NEWLINE_CHAR 10
#define VERTICAL_TAB_CHAR 11
#define FEED_CHAR 12
#define CARRIAGE_RETURN_CHAR 13

# Constantes para que sea mas clara la ABI
#define STACK_SP 8
#define STACK_FP 4
#define STACK_GP 0

	.text
	.align 2
	.globl isSpace # Dice que isSpace es global
	.ent isSpace

isSpace:

	.frame $fp, STACK_SP, ra
	.set noreorder
	.cpload t9
	.set reorder

	# Preparo el frame stack.
	subu sp,sp, STACK_SP
	.cprestore STACK_GP
	sw $fp,STACK_FP(sp)
	move $fp, sp

	# Guardo argumentos en ABA de la funcion padre
	sw	a0,STACK_SP($fp)	# Pongo a0 en el ABA+0 de la funcion padre

	# Cargo el argumento en registros temporales
	lw	t0, STACK_SP($fp)	#t0<-c

versiespacio:
	# Si c es igual a alguno de los separados, devuelvo uno
	beq t0, SPACE_CHAR, devolveruno
	beq t0, HORIZONTAL_TAB_CHAR, devolveruno
	beq t0, NEWLINE_CHAR, devolveruno
	beq t0, VERTICAL_TAB_CHAR ,devolveruno
	beq t0, FEED_CHAR, devolveruno
	beq t0, CARRIAGE_RETURN_CHAR, devolveruno

devolvercero:
	li v0,0
	b fin

devolveruno:
	li v0,1

fin: # Dejo el stack como estaba
	 move 	sp,$fp
	 lw	$fp, STACK_FP(sp)
	 addu	sp, sp, STACK_SP
     j ra	# Retorno

.end isSpace
